home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
076-100
/
scopedisk81
/
asmtool1
/
test3.asm
< prev
next >
Wrap
Assembly Source File
|
1995-03-19
|
6KB
|
175 lines
; TEST3.ASM by Warren A. Ring
;
; This program shows how the warlib disk I/O routines work. You can open,
; create, rename, and delete files. Once open, you can close the file, or
; read, write, or seek in it. You can also display or modify records.
; In this example, we can create files with 16-byte fixed record lengths.
; Each record contains a phrase padded with spaces to make it 16 characters
; long. After exiting this program, you can see the exact hex bytes by
; entering "1>type <filename> opt h", where <filename> is the name of the
; file you created.
section code
include "macros.asm"
Start ;Perform starting housekeeping
X1
Display <'O)pen, C)reate, R)ename, D)elete, E)xit: '>
ReadCon #Selection ;Get a selection from the console
StrCmp #Selection,#O ;If the selection is not "O",
BNE X2 ; then jump to X2
Display <'Which file? '>
ReadCon #Filename1 ;Get a file name from the console
Open #Filename1,File1;Try to open the file
BEQ X1A ;If the file did not open, then jump to X1A
Display <'The file is open',LF>
BRA X10 ;Jump to X10
X1A
Display <'There is no such file',LF>
BRA X1 ;Jump to X1
X2
StrCmp #Selection,#C ;If the selection is not "C",
BNE X3 ; then jump to X3
Display <'Which file? '>
ReadCon #Filename1 ;Get a file name from the console
Create #Filename1,File1;Try to create the file
BEQ X2A ;If the file was not created, then jump to X2A
Display <'The file is open',LF>
BRA X10 ;Jump to X10
X2A
Display <'I cannot create it',LF>
BRA X1 ;Jump to X1
X3
StrCmp #Selection,#R ;If the selection is not "R",
BNE X4 ; then jump to X4
Display <'Which file? '>
ReadCon #Filename1 ;Get the old file name from the console
Display <'New filename? '>
ReadCon #Filename2 ;Get the new file name
Rename #Filename1,#Filename2;Try to rename the file
BEQ X3A ;If the file was not renamed, then jump to X3A
Display <'The file is renamed',LF>
BRA X1 ;Jump to X1
X3A
Display <'I cannot rename it',LF>
BRA X1 ;Jump to X1
X4
StrCmp #Selection,#D ;If the selection was not "D",
BNE X5 ; then jump to X5
Display <'Which file? '>
ReadCon #Filename1 ;Get a file name from the console
Delete #Filename1 ;Try to delete the file
BEQ X4A ;If the file was not deleted, then jump to X4A
Display <'The file is deleted',LF>
BRA X1 ;Jump to X1
X4A
Display <'I cannot delete it',LF>
BRA X1 ;Jump to X1
X5
StrCmp #Selection,#E ;If the selection was not "E",
BNE X6 ; then jump to X6
Display <'Exiting...',10>
BRA X99 ;Jump to X99
X6
BRA X1 ;Jump to X1
X10
Display <'C)lose, R)ead, W)rite, D)isplayRec, M)odifyRec, S)eek: '>
ReadCon #Selection ;Get a selection from the console
StrCmp #Selection,#C ;If the selection was not "C",
BNE X11 ; then jump to X11
Close File1 ;Try to close the file (ignore any errors)
BRA X1 ;Jump to X1
X11
StrCmp #Selection,#R ;If the selection was not "R",
BNE X12 ; then jump to X12
Read File1,#Record1 ;Read a record from the file
ADDQ.L #1,RecNum1 ;Increment the record number
StrLen #Record1 ;If there were some bytes read,
BNE X10 ; then jump to X10
Display <'Unwritten record',LF>
BRA X10 ;Jump to X10
X12
StrCmp #Selection,#W ;If the selection was not "W",
BNE X13 ; then jump to X13
ADDQ.L #1,RecNum1 ;Increment the record number
Write File1,#Record1 ;Write a record to the file
BGT X10 ;If any bytes were written, then jump to X10
Display <'Error',LF>
BRA X10 ;Jump to X10
X13
StrCmp #Selection,#D ;If the selection was not "D",
BNE X14 ; then jump to X14
Display <'Record '>
ItoA RecNum1,#Selection;Convert the record number to ASCII
WritCon #Selection ;Display the record number
Display <', the word is "'>
WritCon #Record1 ;Display the record
Display <'"',LF>
BRA X10 ;Jump to X10
X14
StrCmp #Selection,#M ;If the selection was not "W",
BNE X15 ; then jump to X15
Display <'Enter a new word: '>
ReadCon #Word ;Get a line from the console
StrCpy #Spaces,#Record1;Pad the line with spaces to make it
StrCpy #Word,#Record1 ; 16 chars long
MOVE.L #16,D0 ;Assign the line length to 16 bytes
MOVE.L D0,Record1+4
BRA X10 ;Jump to X10
X15
StrCmp #Selection,#S ;If the selection was not "S",
BNE X16 ; then jump to X16
Display <'Enter the record number: '>
ReadCon #Selection ;Get a record number from the console
AtoI #Selection,RecNum1;Convert the record number from ASCII to binary
MOVE.L RecNum1,D0 ;Convert the record number to a file offset
LSL.L #4,D0 ; (by multiplying the record number by 16)
MOVE.L D0,File1Offset
Seek File1,File1Offset;Seek to the file offset
BRA X10 ;Jump to X10
X16
BRA X10 ;Jump to X10
X99
Exit ;Perform ending housekeeping, and exit
include "warlib.asm"
section data
String C,'C'
String D,'D'
String E,'E'
String M,'M'
String O,'O'
String R,'R'
String S,'S'
String W,'W'
String Spaces,<' '>
StrBuf Filename1,16
StrBuf Filename2,16
StrBuf Word,16
StrBuf Record1,16
StrBuf Selection,16
File1 DC.L 0
RecNum1 DC.L 0
File1Offset DC.L 0
end